In lossless communication networks, a sender and a receiver communicate using link-level protocols. A link-level protocol may correspond to the direct communication of the sender with the receiver, and may include error-free, in-order and single-copy delivery of data packets.
Link-level protocols include a Link-Level Flow Control (LL-FC) protocol and a Link-Level Reliable Delivery (LL-RD) protocol. Each of the LL-FC protocol and LL-RD protocol are used over the same link during each communication instance between a sender and a receiver.
An LL-FC protocol achieves low-latency in delivery of data packets, losslessness, work conservation and efficiency during each communication instance. Losslessness enforces that a data packet is not dropped by the receiver owing to a lack of buffer space at a receiver. Work conservation enforces that the link used for each communication instance is not idle. Efficiency may include efficient use of resources such as bandwidth, power and buffer space.
An LL-RD protocol achieves reliability, which includes error-free, in-order, and single copy delivery by handling data corruption and loss owing to transmission errors in each communication instance. Data corruption and loss owing to transmission errors are detected by methods that include, but are not limited to, Forward Error Correction (FEC), and a Cyclic Redundancy Code (CRC). Further, these are handled by returning positive acknowledgements for successfully received data packets and negative acknowledgements for data packets that are corrupted, lost or out of order. Additionally, the sender stores a data packet until a positive acknowledgement is received. A stored data packet is dropped by the sender, if a positive acknowledgement is received corresponding to the packet. However, if a negative acknowledgement is received corresponding to a data packet, then the data packet is retransmitted. Traditionally, LL-FC is a link-level hardware function and LL-RD is handled by higher-level protocols or in software programs.
Existing LL-FC protocols, for example Credited Flow Control (CFC), employ conservative sending rules that guarantee storage of each data packet in a receiver buffer of a receiver. For example, in CFC protocol, data packets cannot be sent to the receiver if sufficient credits are not available at the sender. However, to achieve losslessness and work conservation, each receiver buffer of the receiver may need to be scaled proportionally to a product of a round-trip-time and a link bandwidth. The round-trip time is the latency of the flow-control loop, comprising the data-path time of flight from the sender to the receiver, the control-path time of flight from the receiver to the sender, and processing latencies at both the sender and the receiver. This may require additional speed, power and area, especially in applications where many receiver buffers are concentrated in a single device that must support strict quality of service (QoS) separation across many priorities or virtual lanes (VLs).
Moreover, as a data packet can only be sent if sufficient credits are available before transmitting the data packet, any delay in a FC loop can also induce a delay in the transmission of the data packet, thereby increasing latency in such lossless communication networks.